// pages/editor/editor.js
Page({

  /**
   * 页面的初始数据
   */
  data: {

  },

  editor: null,

  postData(evt) {
    //获取输入的标题
    let title = evt.detail.value.title

    //获取编辑器内容
    this.editor.getContents({
        success: res => {
            let data = {
              title,
              content: res.html
            }
            //存储到storage
            wx.setStorageSync('preview-content', data)
            
            //跳转到预览页面
            wx.navigateTo({
              url: '/pages/preview/preview',
            })
        }
    })

  },

  cacheTitle(e) {
    //注意这个e.detail.value 和 form表单提交拿到的不一样
    wx.setStorageSync('cache-title', e.detail.value)
  },

  //编辑缓存定时器
  cacheTimer: null,
  //最近编辑的获取的事件参数
  cacheDetail: null,

  cacheEdit(e) {
    //实现超过0.5秒才会保存一次，但是要保证能保存最后的结果？

    //保存最近编辑获取的结果，注意这在程序中保存，也就是内存里。
    this.cacheDetail = e.detail

    if (this.cacheTimer) {
      return;
    }

    this.cacheTimer = setTimeout(() => {
      //输出测试，看是否是以指定频率缓存
      console.log('cache content', (new Date).toLocaleString())
      wx.setStorageSync('cache-edit', this.cacheDetail.html)
      //清理定时器记录，保证下次可以继续缓存
      this.cacheTimer = null
    }, 1000)
    
  },

  initEditor() {
      let query = wx.createSelectorQuery()
      
      return new Promise((rv, rj) => {
        if (this.editor) {
          return rv(this.editor)
        }
        
        query.select('#my-editor')
          .context(res => {
              this.editor = res.context
              rv(res.context)
          }).exec()
      })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.initEditor()
        .then(editor => {
            let title = wx.getStorageSync('cache-title')
            let content = wx.getStorageSync('cache-edit')

            if (title) {
              this.setData({
                title: title
              })
            }

            editor.setContents({
              html: content
            })
        })
  },

  redo() {
    this.editor.redo()
  },

  undo() {
    this.editor.undo()
  },

  async uploadImage() {
      //选择图片，允许从图片选择或相机拍照，
      //尺寸不进行压缩
      //pr是一个Promise实例
      let pr = new Promise((rv, rj) => {
          wx.chooseMedia({
            count: 1,
            mediaType: ['image'],
            sourceType: ['album', 'camera'],
            sizeType: ['original'],
            success: res => {
              rv(res)
            },
            fail: err => {
              rj(err)
            }
          })
      })
      
      //声明但没有赋值，默认是undefined
      let res;
      try {
        res = await pr;
      } catch (err) {
        return wx.showToast({
          title: '选择图片失败',
          icon:'error'
        })
      }

      pr = new Promise((rv, rj) => {
          wx.uploadFile({
            header: {
              authorization: wx.getStorageSync('token')
            },
            filePath: res.tempFiles[0].tempFilePath,
            name: 'image',
            url: 'http://localhost:1234/image',
            success: res => {
                if (res.statusCode == 200) {
                    rv(res)
                } else {
                  //rejected一个新的错误对象
                  rj(new Error('上传失败'))
                }
            },
            fail: err => {
              rj(err)
            }
          })
      })
      
      try {
        //res在之前已经定义过
        res = await pr;  
      } catch (err) {
        return wx.showToast({
          title: '上传失败',
          icon: 'error'
        })
      }

      //插入图片的代码
      //res.data.upload_name是上传名
      //res.data在上传文件里是一个字符串，需要自己JSON.parse
      let obj = JSON.parse(res.data)
      let imgname = obj.upload_name
      this.editor.insertImage({
        src: `http://localhost:1234/image/${imgname}`,
      })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})